06 sample_settings.hsp

sample\ 06 sample_settings.hsp

#include "mod_layerbutton.hsp"

gosub *create_button_hidari
gosub *create_button_migi
gosub *create_button_shita

log = ""
// 表示ループ
repeat
	redraw 0 : color 255,255,255 : boxf : color 220,220,220 : pos 0,0 : font msgothic,15
	mes log
	color
	pos  40, 25 : mes "マウスによる操作無効\n(フォーカス→キーボード操作可能)"
	pos 325, 25 : mes "キーボードによる移動決定に\nWASD,エンターキーを使えなくする"
	pos 180,330 : mes "ボタンを押しても非表示にしない"
	font msgothic,15,1
	pos 180,  0 : mes "laybtn_settings の設定例"
	font msgothic,12
	color 128,, :pos  60,415 : mes "他のボタンにフォーカスが移ったとき、\n移動前のボタンを強制的に通常状態に戻す。"
	color ,,128 : pos 340,415 : mes "FOCUS_INの表示が完了する前に\nフォーカスが外れたときFOCUS_OUTを即座に開始。  "
	redraw 1
	await 1000/60
loop
stop

// ボタン作成 : 左
*create_button_hidari
	if laybtn_length(0) > 0 : return  ; グループID 0 がすでに存在する場合はreturn
	pos 60,60
	repeat 4
		pos ,ginfo_cy+5
		// ボタン作成 : グループID 0
		layerbutton 180,50, cnt, 0, 30,10,5, 15,5,2 {
			laybtn_settings 0,1,0  ; 設定 : マウス操作無効
			if lparam == objlayer_cmddraw {
				color 255,255,255 : font msgothic, 18, 1  ; laybtn_ezboxのテキスト設定
				laybtn_ezbox $BBFF9999, $BBFF0000, $BBAA0000, "ボックス0"+(objlayer_option+1)
				// ボタンのクリック判定
				if layerbtn_stat == LAYBTN_COMPLETE_SELECTED {
					log += "hidari - COMPLETE! opt="+objlayer_option+" wp="+wparam +"\n"
				}
			}
			return
		}
		if cnt == 0 : hidari_fobj = stat  ; 最初のボタンのオブジェクトIDを保存
	loop
	return

// ボタン作成 : 右
*create_button_migi
	if laybtn_length(1) >= 3 : return  ; グループID 1 がすでに存在する場合はreturn
	repeat 4
		switch cnt
		case 0 : pos 320, 70 : swbreak
		case 1 : pos 450, 70 : swbreak
		case 2 : pos 320, 180 : swbreak
		case 3 : pos 450, 180 : swbreak
		swend
		// ボタン - グループID 1
		layerbutton 120,100, cnt, 1, 30,10,5, 15,5,2 {
			laybtn_settings 4+32,0,0  ; 設定 : WASD移動/エンター決定 制限
			if lparam == objlayer_cmddraw {
				color 255,255,255 : objcolor 0,0,0 : font msgothic, 18, 1  ; laybtn_ezboxのテキスト設定
				laybtn_ezbox $BB9999FF, $BB0000FF, $BB0000AA, "ボックス0"+(objlayer_option+1)
				// ボタンのクリック判定
				if layerbtn_stat == LAYBTN_COMPLETE_SELECTED {
					log += "migi - COMPLETE! opt="+objlayer_option+" wp="+wparam +"\n"
				}
			}
			return
		}
		if cnt == 0 : migi_fobj = stat  ; 最初のボタンのオブジェクトIDを保存
	loop
	return

// ボタン作成 : 下
*create_button_shita
	repeat 3
		pos 60+80*cnt, 360
		// ボタン - グループID 2
		layerbutton 70,40, cnt, 2, 0,20,5, 0,20,2 {
			laybtn_settings 0,0,1+8  ; 設定 : ボタンを押しても消さない + フォーカスアニメーションについて
			if lparam == objlayer_cmddraw {
				color 255,, : boxf objlayer_axis_x-1, objlayer_axis_y-1, objlayer_axis_x2, objlayer_axis_y2  ; 1px大きくボタン下地描画
				color 255,255,255 : objcolor 100,100,100 : font msgothic, 12  ; laybtn_ezboxのテキスト設定
				switch objlayer_option
				case 0 : btxt = "Show/Hide" : swbreak
				case 1 : btxt = "Focus" : swbreak
				case 2 : laybtn_enable 0,-1 : btxt = "Enable "+stat : swbreak
				swend
				laybtn_ezbox $999999, $BBBBBB, $666666, btxt,4 ,,,,,0  ; 角丸なし長方形
				// ボタンのクリック判定
				if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
					log += "shita_L - SELECTED! opt="+objlayer_option+" wp="+wparam +"\n"
					switch objlayer_option
					case 0 : if laybtn_length(0) != 0 : laybtn_hide 0 : else : gosub *create_button_hidari : swbreak
					case 1 : objsel hidari_fobj : swbreak
					case 2 : laybtn_enable 0,-1 : laybtn_enable 0,1-stat : swbreak
					swend
				}
			}
			return
		}
	loop
	repeat 3
		pos 340+80*cnt, 360
		// ボタン - グループID 2
		layerbutton 70,40, cnt, 2, 0,20,5, 0,20,2 {
			laybtn_settings 0,0,1+16  ; 設定 : ボタンを押しても消さない + フォーカスアニメーションについて
			if lparam == objlayer_cmddraw {
				// ボタンの描画
				color ,,255 : boxf objlayer_axis_x-1, objlayer_axis_y-1, objlayer_axis_x2, objlayer_axis_y2  ; 1px大きくボタン下地描画
				color 255,255,255 : objcolor 100,100,100 : font msgothic, 12  ; laybtn_ezboxのテキスト設定
				switch objlayer_option
				case 0 : btxt = "Show/Hide" : swbreak
				case 1 : btxt = "Focus" : swbreak
				case 2 : laybtn_enable 1,-1 : btxt = "Enable "+stat : swbreak
				swend
				laybtn_ezbox $999999, $BBBBBB, $666666, btxt,4 ,,,,,0  ; 角丸なし長方形
				// ボタンのクリック判定
				if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
					log += "shita_R - SELECTED! opt="+objlayer_option+" wp="+wparam +"\n"
					switch objlayer_option
					case 0 : if laybtn_length(1) != 0 : laybtn_hide 1 : else : gosub *create_button_migi : swbreak
					case 1 : objsel migi_fobj : swbreak
					case 2 : laybtn_enable 1,-1 : laybtn_enable 1,1-stat : swbreak
					swend
				}
			}
			return
		}
	loop
	return